Работа с драйверами JDBC/ADBC¶
TCS поддерживает работу с общедоступными драйверами для интерфейсов JDBC и ADBC по SQL-протоколу Apache Arrow Flight.
Установка драйверов¶
Скачайте установочный пакет нужного драйвера по ссылке:
Подключение драйверов¶
Примечание
Инструкции по подключению драйверов составлены для локально развернутого кластера TCS.
Подключение драйвера JDBC к редактору DBeaver¶
Примечание
Перед подключением драйвера убедитесь, что поддержка драйверов JDBC/ADBC включена в конфигурации TCS.
В DBeaver добавьте драйвер JDBC для Arrow Flight SQL в качестве нового драйвера:
a. В меню выберите пункт Database > Driver Manager.
b. В диалоговом окне Driver manager нажмите Create.
c. В разделе Settings выполните следующие действия:
В поле Name укажите имя драйвера, например
JDBC Driver for Arrow Flight SQL.В поле Driver Type убедитесь, что выбран тип драйвера
Generic.В поле Class Name укажите
org.apache.arrow.driver.jdbc.ArrowFlightJdbcDriver.В поле URL Template укажите
jdbc:arrow-flight-sql://{host}:{port}(например,jdbc:arrow-flight-sql://localhost:50051).В поле Default Port укажите порт
50051.
d. В разделе Libraries нажмите Add File и выберите .jar-файл для драйвера JDBC для Arrow Flight SQL.
e. Нажмите OK.
Создайте подключение к DBeaver, использующее ваш драйвер:
a. Выберите Database > New Connection from JDBC URL.
b. В поле Create New Connection в диалоговом окне JDBC URL введите
jdbc:arrow-flight-sql://{host}:{port}?useEncryption=0(например,jdbc:arrow-flight-sql://localhost:50051?useEncryption=0).Свойство
useEncryption=0(false) необходимо указывать явно, поскольку при работе с текущей версией TCS поддерживаются только незашифрованные JDBC-соединения. Значение по умолчанию для этого свойства равно1(true).В результате DBeaver добавит ваш драйвер в список Drivers.
c. Выберите ваш драйвер в списке Drivers и нажмите Next.
d. В диалоговом окне Connect to a Database укажите свои учетные данные для аутентификации. При работе с текущей версией TCS поддерживаются только JDBC-соединения по имени пользователя и паролю.
Учетные данные задаются в конфигурации TCS.
e. (необязательно) Нажмите Test Connection. Если подключение работает, откроется диалоговое окно Connection Test, в котором указывается, что DBeaver может подключиться к TCS. После попытки подключения соединение закрывается. Нажмите OK.
f. Нажмите Finish.
Подключение драйвера ADBC к Apache Superset¶
Примечание
Перед подключением драйвера убедитесь, что поддержка драйверов JDBC/ADBC включена в конфигурации TCS.
Склонируйте локально репозиторий Apache Superset https://github.com/apache/superset.
В локальном репозитории Apache Superset создайте файл
docker/requirements-local.txtи впишите в него пакеты с зависимостями:pyarrow==15.0.0 flightsql-dbapi==0.2.2 adbc-driver-flightsql==1.4.0 psycopg2-binary==2.9.10
Соберите и запустите Docker-образ Apache Superset с помощью Docker Compose:
export TAG=4.1.1 docker compose -f docker-compose-image-tag.yml up
Подробнее см. https://superset.apache.org/docs/installation/docker-compose/.
Подключитесь к веб-интерфейсу Apache Superset по HTTP-адресу
http:/localhost:8088.Добавьте новое соединение
datafusion+flightsql://tcs:tcs@{host}:{port}?insecure=True(например,datafusion+flightsql://tcs:tcs@host.docker.internal:50051?insecure=True).Подробнее см. https://superset.apache.org/docs/configuration/databases#connecting-through-the-ui.
Параметры строки соединения¶
Параметры строки соединения для каждого драйвера описаны в документации Apache Arrow:
Работа с индексами¶
Работа с индексами через JDBC¶
Для работы с первичными индексами через JDBC доступна функция getPrimaryKeys(),
которая возвращает описания колонок всех первичных индексов для указанной таблицы.
См. подробнее в документации Oracle.
Работа с индексами через ADBC¶
Драйвер ADBC, использующийся в текущей версии TCS, не поддерживает работу с индексами.
Работа с нематериализованными SQL-представлениями¶
Создание SQL-представления: доступно через SQL-запрос.
Просмотр списка всех доступных SQL-представлений:
В редакторе DBeaver: нажать кнопку
Refresh, все доступные SQL-представления отобразятся в спискеViews.В редакторе Superset: нажать кнопку
Refresh, все доступные SQL-представления отобразятся в спискеTABLE.
Просмотр текста SQL-представления: в любом редакторе выбрать SQL-представление в списке, рядом отобразится его текст.
Замещение SQL-представления: доступно через SQL-запрос.
Удаление SQL-представления: доступно через SQL-запрос.
Работа с аналитическими расчетами через JDBC/ADBC¶
Подробнее про аналитическиа расчеты (prepared statements) в TCS см. в разделе Аналитические расчеты.
Работа с аналитическими расчетами через JDBC¶
Требуется JDBC-драйвер flight-sql-dbc-driver версии не ниже 18.3.0.
Для работы с этим драйвером нужно установить зависимость в клиентском приложении.
Пример: добавление зависимости в pom.xml:
<dependency>
<groupId>org.apache.arrow</groupId>
<artifactId>flight-sql-jdbc-driver</artifactId>
<version>18.3.0</version>
</dependency>
Пример: строка соединения:
jdbc:arrow-flight-sql://localhost:50051?useEncryption=false&user=tcs&password=tcs
Примечание
В текущей версии TCS не поддержано исполнение аналитических расчетов через .execute(),
.addBatch() и .executeBatch(). Доступны только SQL-запросы с EXECUTE.
Работа с аналитическими расчетами через ADBC¶
Требуется драйвер go adbc версии не ниже 1.7.0.
Пример кода создания/вызова:
prepared, err := db.Prepare("SELECT * FROM t WHERE a=$1")
if err != nil {
log.Fatalf("Failed to prepare the statement: %v", err)
}
var num int32
var str string
if err = prepared.QueryRow(1).Scan(&num, &str); err != nil {
log.Fatalf("Failed to execute query: %v", err)
}
fmt.Println(num, str)
Пакетная загрузка данных через JDBC¶
Пакетная загрузка данных через JDBC осуществляется с помощью вставки следующего вида:
INSERT INTO таблица (столбец1, столбец2) VALUES ($1, $2);
Пример кода:
static String singleRowPreparedInsert = "INSERT INTO t VALUES($1, $2, $3, $4)";
static void runBatchInsert(Connection conn) throws SQLException {
try (var statement = conn.prepareStatement(singleRowPreparedInsert)) {
for (int i = 2; i <= 5; ++i) {
statement.setInt(1, i);
statement.setInt(2, i);
statement.setString(3, String.format("%d", i));
statement.setBoolean(4, true);
statement.addBatch();
}
statement.executeBatch();
}
}